<?php
class Imagen extends Doctrine_Record {
    public function setTableDefinition() {
        $this->setTableName('imagen');
        $this->hasColumn('src', 'string', 255);
        $this->hasColumn('orden', 'integer', 3, array('default'=>0));
        $this->hasColumn('caption', 'string', 511);
        $this->hasColumn('tabla', 'string', 30);
        $this->hasColumn('id_generic_object', 'integer');
    }
    
    public function __get($clave) {
        if ($clave == 'tabla' || $clave == 'id' || $clave == 'src' || $clave == 'orden' ||$clave == 'id_generic_object') {
            return $this->_get($clave);
        } else if ( $clave == 'caption') {
            return utf8_decode($this->_get($clave));
        } else {
            $id = $this->_get('id_generic_object');
            return Doctrine::getTable($clave)->find($id);
        }
    }
    public function __set($clave, $valor) {
        if ($clave == 'tabla' || $clave == 'id' || $clave == 'src' || $clave == 'orden' ||  $clave == 'id_generic_object') {
            $this->_set($clave, $valor);
        } else if ( $clave == 'caption') {
            $this->_set($clave, utf8_encode($valor));
        } else {
            $q = Doctrine_Query::create()
                ->update('Imagen')
                ->set('id_generic_object', $valor->id)
                ->where('id = '.$this->id);
            $q->execute();
        }
    }
    
    public static function lastId () {
        $q = Doctrine_Query::create()
            ->select('i.id')
            ->from('Imagen i')
            ->orderBy('i.id desc');
        $result = $q->execute();
        return $result[0]->id;
    }
    
    public static function lastOrden ($objeto) {
        $q = Doctrine_Query::create()
            ->select('i.orden')
            ->from('Imagen i')
            ->where('i.id_generic_object = '.$objeto->id)
            ->orderBy('i.orden desc');
        $resultado = $q->execute();
        return ($resultado->count())?$resultado[0]->orden:false;
    }
}

/*
 * COMO FUNCIONA
 * Generalmente una imagen guarda una relacion 1 a 1 con otra tabla (un usuario tiene una foto de perfil)
 * o una relacion de 1 a n (un producto tiene varias fotos). Para poder reutilizar la misma tabla imagen
 * para cada tabla que necesite usarla, agregamos en el objeto imagen la propiedad id_generic_object.
 * Este campo guarda el id de cualquier objeto que necesite tener una img. Sera el objeto que "posea" una
 * imagen, el que inicialize esta propiedad con su propio id.
 * Ver el model Home
 */
?>